package entity

import (
	"encoding/json"
	"time"
)

// Service MCP服务实体
// 用于描述MCP服务的详细信息，包括服务名称、描述、SQL语句、关联数据库连接、状态、缓存配置、限流参数、参数列表及创建和更新时间，便于统一管理和调用服务
type Service struct {
	ID           string          `json:"id"`            // 服务唯一标识
	Name         string          `json:"name"`          // 服务名称
	Description  string          `json:"description"`   // 服务描述信息
	SQL          string          `json:"sql"`           // 执行的SQL语句
	ConnectionID string          `json:"connection_id"` // 关联的数据库连接ID
	Status       string          `json:"status"`        // 服务状态（如active/inactive）
	CacheEnabled bool            `json:"cache_enabled"` // 是否启用缓存
	CacheTTL     int             `json:"cache_ttl"`     // 缓存有效期（秒）
	RateLimit    int             `json:"rate_limit"`    // 限流阈值（每秒最大请求数）
	Parameters   json.RawMessage `json:"parameters"`    // 服务参数列表（JSON格式）
	CreatedBy    string          `json:"created_by"`    // 创建人
	UpdatedBy    string          `json:"updated_by"`    // 更新人
	CreatedAt    time.Time       `json:"created_at"`    // 创建时间
	UpdatedAt    time.Time       `json:"updated_at"`    // 更新时间
}

// NewService 创建新服务
func NewService(name, description, sql, connectionID string) *Service {
	return &Service{
		Name:         name,
		Description:  description,
		SQL:          sql,
		ConnectionID: connectionID,
		Status:       "active",
		CacheEnabled: false,
		CacheTTL:     300,
		RateLimit:    0,
	}
}

// IsActive 检查服务是否处于活动状态
func (s *Service) IsActive() bool {
	return s.Status == "active"
}

// HasCache 检查服务是否启用缓存
func (s *Service) HasCache() bool {
	return s.CacheEnabled
}

// HasRateLimit 检查服务是否启用限流
func (s *Service) HasRateLimit() bool {
	return s.RateLimit > 0
}
